using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._ParcelTools._Administration
{
    /// <summary>
    /// <para>Add Parcel Type</para>
    /// <para>Adds a parcel type to a parcel fabric.
    /// A parcel type is defined by a separate polygon and  line feature class. Parcel type feature classes are controlled by the parcel fabric dataset.</para>
    /// <para>将宗地类型添加到宗地结构中。
    /// 宗地类型由单独的面和线要素类定义。宗地类型要素类由宗地结构数据集控制。</para>
    /// </summary>    
    [DisplayName("Add Parcel Type")]
    public class AddParcelType : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public AddParcelType()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_parcel_fabric">
        /// <para>Input Parcel Fabric</para>
        /// <para>The parcel fabric to which the parcel type will be added. The parcel fabric can be from a file geodatabase or an enterprise geodatabase.</para>
        /// <para>要添加宗地类型的宗地结构。宗地结构可以来自文件地理数据库或企业级地理数据库。</para>
        /// </param>
        /// <param name="_name">
        /// <para>Name</para>
        /// <para>The name of the parcel type. The name will be assigned to the output polygon and line feature classes.</para>
        /// <para>宗地类型的名称。该名称将分配给输出面和线要素类。</para>
        /// </param>
        public AddParcelType(object _in_parcel_fabric, object _name)
        {
            this._in_parcel_fabric = _in_parcel_fabric;
            this._name = _name;
        }
        public override string ToolboxName => "Parcel Tools";

        public override string ToolName => "Add Parcel Type";

        public override string CallName => "parcel.AddParcelType";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_parcel_fabric, _name, _updated_parcel_fabric, _out_polygon_fc, _out_line_fc, _administrative_polygon.GetGPValue()];

        /// <summary>
        /// <para>Input Parcel Fabric</para>
        /// <para>The parcel fabric to which the parcel type will be added. The parcel fabric can be from a file geodatabase or an enterprise geodatabase.</para>
        /// <para>要添加宗地类型的宗地结构。宗地结构可以来自文件地理数据库或企业级地理数据库。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Parcel Fabric")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_parcel_fabric { get; set; }


        /// <summary>
        /// <para>Name</para>
        /// <para>The name of the parcel type. The name will be assigned to the output polygon and line feature classes.</para>
        /// <para>宗地类型的名称。该名称将分配给输出面和线要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _name { get; set; }


        /// <summary>
        /// <para>Updated Parcel Fabric</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Parcel Fabric")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _updated_parcel_fabric { get; set; }


        /// <summary>
        /// <para>Output Polygon Feature Class</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Polygon Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_polygon_fc { get; set; }


        /// <summary>
        /// <para>Output Line Feature Class</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Line Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_line_fc { get; set; }


        /// <summary>
        /// <para>Use for administrative boundaries</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the parcel type will be used to store parcels with administrative boundaries or regular boundaries. Administrative boundaries are used for very large parcels such as country parcels or state parcels. The parcel type polygon feature class will not participate in the parcel fabric topology.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—The parcel type will be used to store administrative boundaries. The parcel type polygon feature class will not participate in the parcel fabric topology.</bullet_item><para/>
        ///     <bullet_item>Unchecked—The parcel type will not be used to store administrative boundaries. The parcel type polygon feature class will participate in the parcel fabric topology. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定宗地类型是用于存储具有行政边界的宗地还是常规边界的宗地。行政边界用于非常大的宗地，例如国家宗地或州宗地。宗地类型面要素类不会参与宗地结构拓扑。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 宗地类型将用于存储管理边界。宗地类型面要素类不会参与宗地结构拓扑。</bullet_item><para/>
        ///     <bullet_item>未选中 - 宗地类型将不用于存储管理边界。宗地类型面要素类将参与宗地结构拓扑。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Use for administrative boundaries")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _administrative_polygon_value _administrative_polygon { get; set; } = _administrative_polygon_value._false;

        public enum _administrative_polygon_value
        {
            /// <summary>
            /// <para>ADMINISTRATIVE_POLYGON</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ADMINISTRATIVE_POLYGON")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>TOPOLOGY_POLYGON</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("TOPOLOGY_POLYGON")]
            [GPEnumValue("false")]
            _false,

        }

        public AddParcelType SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}